public class Test2 {
    public static void main(String[] args) {
        BinaryTree binaryTree = new BinaryTree();
        binaryTree.createTree();

        BinaryTree.TreeNode root=binaryTree.root;

        binaryTree.preOrder(root);
        System.out.println();
        System.out.println("=========================");

        binaryTree.inOrder(root);
        System.out.println();
        System.out.println("=========================");

        binaryTree.postOrder(root);
        System.out.println();
        System.out.println("=========================");

        binaryTree.size1(root);
        System.out.println(binaryTree.useSize);

        System.out.println(binaryTree.size2(root));
        System.out.println("=========================");

        binaryTree.getLeafNodeCount1(root);
        System.out.println(binaryTree.leafCount);

        System.out.println(binaryTree.getLeafNodeCount2(root));
        System.out.println("=========================");

        System.out.println(binaryTree.findValue(root,15));

//        binaryTree.preOrder(binaryTree.invertTree(root));
        System.out.println();
        System.out.println("=========================");

        binaryTree.preOrder(root);
        System.out.println(binaryTree.isCompleteTree(root));


    }

//    public boolean isSubtree(TreeNode root, TreeNode subRoot) {
//        if(root==null&&subRoot==null) return true;
//        if(root==null) return false;
//        if(isSameTree(root,subRoot)==true) return true;
//        return isSubtree(root.left,subRoot)||isSubtree(root.right,subRoot);
//
//    }
//
//    public boolean isSameTree(TreeNode p, TreeNode q) {//检查两颗二叉树是否相同
//        if(p==null&&q==null) return true;
//        if((p!=null&&q==null)||(p==null&&q!=null)) return false;
//        if(p.val==q.val)
//            return isSameTree(p.left,q.left)&&isSameTree(p.right,q.right);
//        return false;
//    }

//    public boolean isBalanced(TreeNode root) {
//        if(root==null) return true;
//        if(treeHight(root)==-1) return false;
//        return true;
//    }
//
//    public int treeHight(TreeNode root){
//        if(root==null) return 0;
//        int hight1=treeHight(root.left);
//        int hight2=treeHight(root.right);
//        if(hight1<0||hight2<0) return -1;
//        if(Math.abs(hight1-hight2)<=1)
//            return (hight1>hight2?hight1:hight2)+1;
//        return -1;
//    }

//    public TreeNode invertTree(TreeNode root) {
//        if(root==null) return null;
//        TreeNode node = root.left;
//        root.left=root.right;
//        root.right=node;
//        invertTree(root.left);
//        invertTree(root.right);
//        return root;
//    }

//    public boolean isSymmetric(TreeNode root) {
//        if(root==null) return true;
//        return isSameTree(root.left,root.right);
//    }
//
//    public boolean isSameTree(TreeNode p, TreeNode q) {//检查两颗二叉树是否相同
//        if(p==null&&q==null) return true;
//        if((p!=null&&q==null)||(p==null&&q!=null)) return false;
//        if(p.val==q.val)
//            return isSameTree(p.left,q.right)&&isSameTree(p.right,q.left);
//        return false;
//    }

//    public static void main(String[] args) {
//        Scanner in = new Scanner(System.in);
//        // 注意 hasNext 和 hasNextLine 的区别
//        while (in.hasNextLine()) { // 注意 while 处理多个 case
//            String str = in.nextLine();
//            TreeNode root=creatTree(str);
//            middleTraverse(root);
//            i=0;
//        }
//    }
//    public static int i;
//    public static  TreeNode creatTree(String str){
//        char ch=str.charAt(i);
//        TreeNode node=null;
//        if(ch!='#'){
//            i++;
//            node=new TreeNode(ch);
//            node.left=creatTree(str);
//            node.right=creatTree(str);
//        }else i++;
//
//        return node;
//    }
//
//    public static void middleTraverse(TreeNode root){
//        if(root==null) return ;
//        middleTraverse(root.left);
//        System.out.print(root.node+" ");
//        middleTraverse(root.right);
//    }

//    public String tree2str(TreeNode root) {
//        if(root==null) return null;
//        StringBuffer str= new StringBuffer();
//        preorderTree2str(root,str);
//        return str.toString();
//    }
//    public void preorderTree2str(TreeNode root,StringBuffer str){
//        if(root==null) return;
//        str.append(root.val);
//        if(root.left!=null){
//            str.append("(");
//            preorderTree2str(root.left,str);
//            str.append(")");
//        }else{
//            if(root.left==null&&root.right!=null){
//                str.append("()");
//            }
//        }
//        if(root.right!=null){
//            str.append("(");
//            preorderTree2str(root.right,str);
//            str.append(")");
//        }
//    }
}
